const fs=require("fs");

const type=require("../contentType.json");
const url = require("url");

// 实现URL参数的解析和封装
const qs=require("querystring");
//模板方法
const tempObj = require("art-template");

const routes={
    "/":function(req,res){
        res.writeHead(200,{
            "Content-type":type[".html"]
        });
         // 模拟数据库的数据查询
         let list = [
            {
                name:"tom",
                age:23
            },
            {
                name:"jack",
                age:33
            },
            {
                name:"jack",
                age:33
            },
            {
                name:"jack",
                age:33
            }
        ]
        
        let data=fs.readFileSync("./template/home.html");

        let htmlStr = tempObj.render(data.toString(),{users:list});  // 在node环境下完成数据和页面的对接渲染方法

        res.end(htmlStr);
    },
    "/getData":function(req,res){
        res.writeHead(200,{
            "Content-type":type[".json"]
        });
        // res.end("getData方法");
        
        
        //后台通过 数据库 查询的结果
        let urlObj=url.parse(req.url);
        // console.log(qs.parse(urlObj.query));  // url格式的字符串参数转为 对象 例子 a=b&c=d => { a:"b",c:"d" }
        //urlObj.query为请求数据
        let params=qs.parse(urlObj.query);

        let obj={
            name:params.name,
            age:23
        }
        // console.log(qs.stringify(obj));// 将对象转为url字符串参数 例子 { a:"b",c:"d" } => a=b&c=d

        
        //res.end返回的只能是字符和文本流
        res.end(JSON.stringify(obj));
        
    }
}

module.exports=routes;
// exports.routes=routes;


//exports=routes;
//exports不能直接赋值
// 因为返回的是module.exports,module.exports还是为空;

/*
例子：
module={
    exports:{
        name:"tom"
    }
};
function a(ex){
    ex={
        name:"sam"
    }
        //实参和形参地址不一样，//实参和形参的值为module.exports的地址， 
        //因为ex是module.exports的形参，这样赋值会给形参一个新的堆内存，所以module.exports的值不会变
    

     ex.name="sam" //这样直接点的话不会开辟新内存，直接改变module.exports里的值
}

a(module.exports);

console.log(module.exports);
*/
